package array;

import java.util.Arrays;

/**
 * 给你一个下标从 0 开始长度为 3 的整数数组 nums ，需要用它们来构造三角形。
 * <p>
 * 如果一个三角形的所有边长度相等，那么这个三角形称为 equilateral 。
 * 如果一个三角形恰好有两条边长度相等，那么这个三角形称为 isosceles 。
 * 如果一个三角形三条边的长度互不相同，那么这个三角形称为 scalene 。
 * 如果这个数组无法构成一个三角形，请你返回字符串 "none" ，否则返回一个字符串表示这个三角形的类型。
 * <p>
 * 示例 1：
 * <p>
 * 输入：nums = [3,3,3]
 * 输出："equilateral"
 * 解释：由于三条边长度相等，所以可以构成一个等边三角形，返回 "equilateral" 。
 * 示例 2：
 * <p>
 * 输入：nums = [3,4,5]
 * 输出："scalene"
 * 解释：
 * nums[0] + nums[1] = 3 + 4 = 7 ，大于 nums[2] = 5 。
 * nums[0] + nums[2] = 3 + 5 = 8 ，大于 nums[1] = 4 。
 * nums[1] + nums[2] = 4 + 5 = 9 ，大于 nums[0] = 3 。
 * 由于任意两边之和都大于第三边，所以可以构成一个三角形，因为三条边的长度互不相等，所以返回 "scalene"。
 *
 * @author Jisheng Huang
 * @version 20250519
 */
public class TypeOfTriangle_3024 {
    /**
     * 把 nums 从小到大排序，可以简化判断逻辑。
     * 设排序后 nums=[a,b,c]，那么有 1≤a≤b≤c。
     * 先判是否合法，即三角形任意两边之和必须大于第三边。由于排序后 a+c>b 和 b+c>a 自动成立（注意数组元素都是正数），所以只需判断 a+b>c
     * 是否成立。如果 a+b≤c，那么无法构成三角形。
     * 然后判等边：只需判断 a=c。注意已经排序了，如果 a=c，那么必然有 a=b=c。
     * 然后判等腰：判断 a=b 或者 b=c。
     * 其他情况，三条边长度一定不相等，无需判断。
     *
     * @param nums the given integer array
     * @return the type of the triangle
     */
    public static String triangleType(int[] nums) {
        Arrays.sort(nums);

        int a = nums[0];
        int b = nums[1];
        int c = nums[2];

        if (a + b <= c) {
            return "none";
        } else if (a == c) {
            return "equilateral";
        } else if (a == b || b == c) {
            return "isosceles";
        } else {
            return "scalene";
        }
    }

    public static void main(String[] args) {
        int[] nums = {3, 3, 3};
        System.out.println(triangleType(nums));

        nums = new int[]{3, 4, 5};
        System.out.println(triangleType(nums));

        nums = new int[]{9, 4, 9};
        System.out.println(triangleType(nums));
    }
}
